<?php

namespace app\admin\controller\kuyou;

use app\common\controller\Backend;
use think\Db;
use Exception;
use think\Session;
/**
 * 打印
 *
 * @icon fa fa-circle-o
 */
class Prints extends Backend
{
    protected $noNeedRight = '*';

    public function _initialize()
    {
        parent::_initialize();
        $setData = (new Goods())->getSetData();
        $this->assign('set', $setData['setList']);
        $this->assignconfig('set',$setData['setList']);
        $this->assign('nowmenu', $setData['nowmenu']);
    }
    function getGoods($goods_code='',$goods_attr='',$goods_id=''){
        if(!empty($goods_code)){
            $goods = Db::name('kuyou_goods')->where(['goods_code'=>$goods_code])->find();
        }else{
            $goods = Db::name('kuyou_goods')->where(['id'=>$goods_id])->find();
        }
        $attr_name = '';
        $goods_attr = Db::name('kuyou_goods_attr')->where(['id'=>$goods_attr])->value('attribute_id');
        if($goods_attr){
            $aux_combination = Db::name('kuyou_aux_combination')->where(['id'=>$goods_attr])->value('attr_ids');
            if($aux_combination){
                $attr_ids = explode('&',$aux_combination);
                $auxiliary = Db::name('kuyou_auxiliary')->where(['id'=>['in',$attr_ids]])->column('name');
                $attr_name = implode('/',$auxiliary);
            }
        }
        $goods['goods_name'] = $goods['goods_name'].(empty($goods['goods_specification_id'])?'':'_').$goods['goods_specification_id'].(empty($attr_name)?'':'_').$attr_name;
        return $goods;
    }
    /**
     * 查看
     */
    public function prints()
    {
        $data = input();
        $id = isset($data['id'])?$data['id']:'';
        $type = isset($data['type'])?$data['type']:'';
        if(empty($id) || empty($type)){
            $this->error(__('Parameter error'));
        }

        //获取设置
        $set= \think\Db::name('kuyou_sets')->field('type,name,value,is_checked,set')->select();
        $setList = [];
        foreach ($set as $set_k=>$set_v){
            if(!empty($set_v['set'])){
                $set_v['set'] = unserialize($set_v['set']);
            }
            $setList[$set_v['name']] = $set_v;
        }
        //数量价格格式化
        $number_decimal = $setList['number_decimal']['value'];
        $price_decimal  = $setList['price_decimal']['value'];

        $this->view->assign("company_name", $setList['company_name']['value']);

        switch($type){
            case 1:
                $list = Db::name('kuyou_goods_purchase_order')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                Db::name('kuyou_goods_purchase_order')->where(['id'=>['in',$id]])->inc('print_num')->update();
                foreach ($list as $list_k=>$row){
                    $purchase_info = Db::name('kuyou_goods_purchase_order_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $number = 0;$money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $goods = $this->getGoods($v['goods_code'],$v['goods_attr']);
                        $purchase_info[$k]['goods'] = $goods;
                        $purchase_info[$k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$v['goods_unit']])->find();
                        $purchase_info[$k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$v['stores_id']])->find();
                        $number+=$v['number'];$money+=$v['money_tax_price'];
                    }
                    $number = round($number,$number_decimal);
                    $money  = round($money,$price_decimal);
                    $row['print_number'] = $number;
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['purchase_info'] = $purchase_info;

                    $suppliers = Db::name('kuyou_suppliers')->where(['supplyer_code'=>$row['supplyer_code']])->find();
                    $row['suppliers'] = $suppliers;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('purchase_order');
                break;
            case 2:
                $list = Db::name('kuyou_goods_purchase')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                Db::name('kuyou_goods_purchase')->where(['id'=>['in',$id]])->inc('print_num')->update();
                foreach ($list as $list_k=>$row){
                    $purchase_info = Db::name('kuyou_goods_purchase_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $number = 0;$money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $goods = $this->getGoods($v['goods_code'],$v['goods_attr']);
                        $purchase_info[$k]['goods'] = $goods;
                        $purchase_info[$k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$v['goods_unit']])->find();
                        $purchase_info[$k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$v['stores_id']])->find();
                        $number+=$v['number'];$money+=$v['money_tax_price'];
                    }
                    $number = round($number,$number_decimal);
                    $money  = round($money,$price_decimal);
                    $row['print_number'] = $number;
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['money_tax_price'] = round(($row['real_money']+$row['preferential_money']),$price_decimal);
                    $row['purchase_info'] = $purchase_info;

                    $suppliers = Db::name('kuyou_suppliers')->where(['supplyer_code'=>$row['supplyer_code']])->find();
                    $row['suppliers'] = $suppliers;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('purchase');
                break;
            case 3:
                $list = Db::name('kuyou_goods_exchange')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                Db::name('kuyou_goods_exchange')->where(['id'=>['in',$id]])->inc('print_num')->update();
                foreach ($list as $list_k=>$row){
                    $purchase_info = Db::name('kuyou_goods_exchange_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $number = 0;$money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $purchase_info[$k]['number'] = $v['number'] = $v['retreat_number'];
                        $goods = $this->getGoods($v['goods_code'],$v['goods_attr']);
                        $purchase_info[$k]['goods'] = $goods;
                        $purchase_info[$k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$v['goods_unit']])->find();
                        $purchase_info[$k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$v['stores_id']])->find();
                        $number+=$v['number'];$money+=$v['money_tax_price'];
                    }
                    $number = round($number,$number_decimal);
                    $money  = round($money,$price_decimal);
                    $row['print_number'] = $number;
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['money_tax_price'] = round(($row['real_money']+$row['preferential_money']),$price_decimal);
                    $row['purchase_info'] = $purchase_info;

                    $suppliers = Db::name('kuyou_suppliers')->where(['supplyer_code'=>$row['supplyer_code']])->find();
                    $row['suppliers'] = $suppliers;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('goods_exchange');
                break;
            case 4:
                $list = Db::name('kuyou_goods_sales_order')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                Db::name('kuyou_goods_sales_order')->where(['id'=>['in',$id]])->inc('print_num')->update();
                foreach ($list as $list_k=>$row){
                    $purchase_info = Db::name('kuyou_goods_sales_order_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $number = 0;$money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $goods = $this->getGoods($v['goods_code'],$v['goods_attr']);
                        $purchase_info[$k]['goods'] = $goods;
                        $purchase_info[$k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$v['goods_unit']])->find();
                        $purchase_info[$k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$v['stores_id']])->find();
                        $number+=$v['number'];$money+=$v['money_tax_price'];
                    }
                    $number = round($number,$number_decimal);
                    $money  = round($money,$price_decimal);
                    $row['print_number'] = $number;
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['staff_member'] = Db::name('kuyou_staff_member')->where(['id'=>$row['sale_user']])->find();
                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['purchase_info'] = $purchase_info;

                    $customers = Db::name('kuyou_customers')->where(['id'=>$row['customers_id']])->find();
                    $row['customers'] = $customers;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('sales_order');
                break;
            case 5:
                $list = Db::name('kuyou_goods_sales')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                Db::name('kuyou_goods_sales')->where(['id'=>['in',$id]])->inc('print_num')->update();
                foreach ($list as $list_k=>$row){
                    $purchase_info = Db::name('kuyou_goods_sales_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $number = 0;$money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $goods = $this->getGoods($v['goods_code'],$v['goods_attr']);
                        $purchase_info[$k]['goods'] = $goods;
                        $purchase_info[$k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$v['goods_unit']])->find();
                        $purchase_info[$k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$v['stores_id']])->find();
                        $number+=$v['number'];$money+=$v['money_tax_price'];
                    }
                    $number = round($number,$number_decimal);
                    $money  = round($money,$price_decimal);
                    $row['print_number'] = $number;
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['staff_member'] = Db::name('kuyou_staff_member')->where(['id'=>$row['sale_user']])->find();
                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['purchase_info'] = $purchase_info;

                    $customers = Db::name('kuyou_customers')->where(['id'=>$row['customers_id']])->find();
                    $row['customers'] = $customers;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('sales');
                break;
            case 6:
                $list = Db::name('kuyou_goods_sales_exchange')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                Db::name('kuyou_goods_sales_exchange')->where(['id'=>['in',$id]])->inc('print_num')->update();
                foreach ($list as $list_k=>$row){
                    $purchase_info = Db::name('kuyou_goods_sales_exchange_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $number = 0;$money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $purchase_info[$k]['number'] = $v['number'] = $v['retreat_number'];
                        $goods = $this->getGoods($v['goods_code'],$v['goods_attr']);
                        $purchase_info[$k]['goods'] = $goods;
                        $purchase_info[$k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$v['goods_unit']])->find();
                        $purchase_info[$k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$v['stores_id']])->find();
                        $number+=$v['number'];$money+=$v['money_tax_price'];
                    }
                    $number = round($number,$number_decimal);
                    $money  = round($money,$price_decimal);
                    $row['print_number'] = $number;
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['staff_member'] = Db::name('kuyou_staff_member')->where(['id'=>$row['sale_user']])->find();
                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['purchase_info'] = $purchase_info;

                    $customers = Db::name('kuyou_customers')->where(['id'=>$row['customers_id']])->find();
                    $row['customers'] = $customers;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('sales_exchange');
                break;
            case 'cgmx':
                $page = isset($data['page'])?$data['page']:1;
                $limit = isset($data['limit'])?$data['limit']:10;
                $search = (array)json_decode($data['search'], true);
                $where = [];
                $where['examine_status'] = '1';
                foreach ($search as $k=>$v){
                    if(strpos($v,' - ') !== false && strpos($k,'time') !== false){
                        $str = explode(' - ',$v);
                        $where[$k] = ["BETWEEN", [strtotime($str[0]),strtotime($str[1])]];
                    }else{
                        $where[$k] = ["LIKE", "%{$v}%"];
                    }
                }
                $list = Db::name('kuyou_goods_purchase_info')->where($where)->page($page,$limit)->select();
                foreach ($list as $list_k=>$list_v){
                    $goods = $this->getGoods($list_v['goods_code'],$list_v['goods_attr']);
                    $list[$list_k]['goods'] = $goods;
                    $list[$list_k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$list_v['goods_unit']])->find();
                    $list[$list_k]['suppliers'] = Db::name('kuyou_suppliers')->where(['supplyer_code'=>$list_v['supplyer_code']])->find();
                    $list[$list_k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$list_v['stores_id']])->find();
                }

                foreach ($list as $list_k=>$list_v){
                    if($list_v['purchase_type']==1){
                        $note = Db::name('kuyou_goods_purchase')->where(['purchase_code'=>$list_v['purchase_code']])->value('note');
                    }else{
                        $note = Db::name('kuyou_goods_exchange')->where(['purchase_code'=>$list_v['purchase_code']])->value('note');
                        $list[$list_k]['number'] = -$list_v['number'];
                        $list[$list_k]['all_money'] = -$list_v['all_money'];
                        $list[$list_k]['tax_money'] = -$list_v['tax_money'];
                        $list[$list_k]['money_tax_price'] = -$list_v['money_tax_price'];
                    }
                    $list[$list_k]['note'] = $note;

                    $list[$list_k]['number'] = round($list[$list_k]['number'],$number_decimal);
                    $list[$list_k]['unit_price'] = round($list[$list_k]['unit_price'],$price_decimal);
                    $list[$list_k]['tax_included'] = round($list[$list_k]['tax_included'],$price_decimal);
                    $list[$list_k]['all_money'] = round($list[$list_k]['all_money'],$price_decimal);
                    $list[$list_k]['purchase_money'] = round($list[$list_k]['purchase_money'],$price_decimal);
                    $list[$list_k]['tax_money'] = round($list[$list_k]['tax_money'],$price_decimal);
                    $list[$list_k]['money_tax_price'] = round($list[$list_k]['money_tax_price'],$price_decimal);
                }

                $number = Db::name('kuyou_goods_purchase_info')->where($where)->sum('number');
                $all_money = Db::name('kuyou_goods_purchase_info')->where($where)->sum('all_money');
                $purchase_money = Db::name('kuyou_goods_purchase_info')->where($where)->sum('purchase_money');
                $tax_money = Db::name('kuyou_goods_purchase_info')->where($where)->sum('tax_money');
                $money_tax_price = Db::name('kuyou_goods_purchase_info')->where($where)->sum('money_tax_price');

                if($number>0){
                    $unit_price = round($all_money/$number,$price_decimal);
                    $tax_included = round($money_tax_price/$number,$price_decimal);
                }else{
                    $unit_price = 0;
                    $tax_included = 0;
                }
                $number = round($number,$number_decimal);
                $all_money = round($all_money,$price_decimal);
                $purchase_money = round($purchase_money,$price_decimal);
                $tax_money = round($tax_money,$price_decimal);
                $money_tax_price = round($money_tax_price,$price_decimal);
                $count = ['number'=>$number,'unit_price'=>$unit_price,'tax_included'=>$tax_included,'all_money'=>$all_money,'purchase_money'=>$purchase_money,'tax_money'=>$tax_money,'money_tax_price'=>$money_tax_price];

                $this->view->assign("list", $list);
                $this->view->assign("count", $count);
                return $this->view->fetch('goods_purchase_info');
                break;
            case 'cgddgz':
                $search = (array)json_decode($data['search'], true);
                $where = [];
                foreach ($search as $k=>$v){
                    if(strpos($v,' - ') !== false && strpos($k,'time') !== false){
                        $str = explode(' - ',$v);
                        $where['i.'.$k] = ["BETWEEN", [strtotime($str[0]),strtotime($str[1])]];
                    }else{
                        $where['i.'.$k] = ["LIKE", "%{$v}%"];
                    }
                }

                $field = empty(input('field'))?'goods_code':trim(input('field'));
                $order = empty(input('sort'))?'DESC':trim(input('sort'));

                $list = Db::name('kuyou_goods_purchase_order_info')->alias('i')
                    ->join('kuyou_goods_purchase_order po','po.purchase_code=i.purchase_code')
                    ->join('kuyou_goods g','g.goods_code=i.goods_code')
                    ->join('kuyou_unit u','u.id=i.default_unit')
                    ->join('kuyou_suppliers s','s.supplyer_code=i.supplyer_code')
                    ->join('kuyou_stores r','r.id=i.stores_id')
                    ->where($where)
                    ->order(['i.'.$field=>$order,'i.purchase_time'=>'DESC'])
                    ->field('i.id,i.goods_attr,i.goods_code,i.purchase_code,i.purchase_type,i.purchase_time,i.delivery_time
                ,i.supplyer_code,i.money_tax_price,po.status,i.number,i.tax_included,i.number as library_number,i.money_tax_price as library_money,i.library_time,
                g.goods_name,g.goods_specification_id,
                s.supplyer_code as s_code,s.supplyer_name as s_name,
                r.name as r_name,
                u.name as unitname')
                    ->select();
                foreach ($list as $list_k=>$list_v){
                    $purord_info = Db::name('kuyou_goods_purord_info')->where(['order_id'=>$list_v['id'],'status'=>'1'])->field('sum(number) as number,sum(money_tax_price) as all_money')->find();

                    $p_id = Db::name('kuyou_goods_purord_info')->where(['order_id'=>$list_v['id'],'status'=>'1'])->value('purchase_id');
                    $goods_excpur_info = Db::name('kuyou_goods_excpur_info')->where(['purchase_id'=>$p_id,'status'=>'1'])->find();
                    if($goods_excpur_info){
                        $purord_info['number'] = round( ($purord_info['number']-$goods_excpur_info['number']),2 );
                        $purord_info['all_money'] = round( ($purord_info['all_money']-$goods_excpur_info['money_tax_price']),2 );
                    }

                    if($purord_info){
                        $list[$list_k]['library_number'] = round(($list[$list_k]['library_number']-$purord_info['number']),2);
                        $list[$list_k]['library_money'] = round(($list[$list_k]['library_money']-$purord_info['all_money']),4);
                    }
                    if($list[$list_k]['library_number']>0 && $list[$list_k]['library_number']<$list[$list_k]['number']){
                        $list[$list_k]['status'] = 2;
                    }else if($list[$list_k]['library_number']>0 && $list[$list_k]['library_number']=$list[$list_k]['number']){
                        $list[$list_k]['status'] = 0;
                    }
                    $purord_time = Db::name('kuyou_goods_purord_info')->where(['order_id'=>$list_v['id'],'status'=>1])->order('times','DESC')->value('times');
                    if($purord_time){
                        $list[$list_k]['library_time'] = $purord_time;
                    }
                }

                foreach ($list as $list_k=>$list_v){
                    $goods = $this->getGoods($list_v['goods_code'],$list_v['goods_attr']);
                    $list[$list_k]['goods_name'] = isset($goods['goods_name'])?$goods['goods_name']:$list_v['goods_name'];
                    if($list_v['purchase_type']==2){
                        $list[$list_k]['number'] = -$list_v['number'];
                        $list[$list_k]['money_tax_price'] = -$list_v['money_tax_price'];
                        $list[$list_k]['library_number'] = -$list_v['library_number'];
                        $list[$list_k]['library_money'] = -$list_v['library_money'];
                    }
                }

                $count = [
                    'number'=>0,
                    'money_tax_price'=>0,
                    'library_number'=>0,
                    'library_money'=>0,
                ];
                $counts = $count;
                $counts['purchase_type'] = '合计';
                $data = [];
                $now = isset($list[0][$field])?$list[0][$field]:'';
                foreach ($list as $list_k=>$list_v){
                    if($list_v[$field]!=$now){
                        $now = $list_v[$field];
                        $row = $count;$row['purchase_type'] = '小计';
                        $data[] = $row;
                        foreach ($count as $count_k=>$count_v){
                            $count[$count_k] = $list_v[$count_k];
                            $counts[$count_k] += $list_v[$count_k];
                        }
                    }else{
                        foreach ($count as $count_k=>$count_v){
                            $count[$count_k] += $list_v[$count_k];
                            $counts[$count_k] += $list_v[$count_k];
                        }
                    }
                    $data[] = $list_v;
                    if($list_k==(sizeof($list)-1) || sizeof($list)==1){
                        $row = $count;$row['purchase_type'] = '小计';
                    }
                }
                $this->view->assign("list", $data);
                $this->view->assign("count", $row);
                $this->view->assign("counts", $counts);
                return $this->view->fetch('goods_purchase_order_info');
                break;
            case 'cghzb_sp':
                $search = (array)json_decode($data['search'], true);
                $where = [];
                foreach ($search as $k=>$v){
                    if(strpos($v,' - ') !== false && strpos($k,'time') !== false){
                        $str = explode(' - ',$v);
                        $where['i.'.$k] = ["BETWEEN", [strtotime($str[0]),strtotime($str[1])]];
                    }else{
                        $where['i.'.$k] = ["LIKE", "%{$v}%"];
                    }
                }

                $field = empty(input('field'))?'goods_code':trim(input('field'));
                $order = empty(input('sort'))?'DESC':trim(input('sort'));

                $price_decimal = \think\Db::name('kuyou_sets')->where((new Goods())->setWhere(['name'=>'price_decimal']))->value('value');
                $number_decimal = \think\Db::name('kuyou_sets')->where((new Goods())->setWhere(['name'=>'number_decimal']))->value('value');

                $list = [];
                $lists = Db::name('kuyou_goods_purchase_summary')->alias('i')
                    ->join('kuyou_goods g','g.goods_code=i.goods_code')
                    ->join('kuyou_goods_type gt','gt.id=g.goods_type_id')
                    ->join('kuyou_stores s','s.id=i.stores_id')
                    ->join('kuyou_unit u','u.id=i.goods_unit')
                    ->where($where)
                    ->order(['i.'.$field=>$order])
                    ->group('i.goods_code,i.stores_id')
                    ->field('sum(i.tax_money) as tax_money,sum(i.money_tax_price) as money_tax_price,i.goods_code,i.stores_id,sum(i.basic_nmber) as basic_nmber,sum(number) as i_number,sum(all_money) as all_money,i.default_unit,i.goods_unit,i.purchase_money,
                g.goods_code,g.goods_name,g.goods_specification_id,
                gt.supplier_type_name,
                s.name as s_name,u.name as u_name')
                    ->select();
                if(!empty($lists)){
                    foreach ($lists as $lists_k=>$lists_v){
                        $lists_v['i_number'] = $lists_v['basic_nmber'];
                        $lists_v['unit_conversion'] = Db::name('kuyou_unit_conversion')->where(['main_unit'=>$lists_v['default_unit'],'vice_unit'=>$lists_v['goods_unit']])->value('advance_rate');
                        if(!empty($list)){
                            foreach ($list as $list_k=>$list_v){
                                if($list_v['goods_code']==$lists_v['goods_code'] && $list_v['stores_id']==$lists_v['stores_id']){
                                    $list[$list_k]['i_number'] += $lists_v['i_number'];
                                    $list[$list_k]['all_money'] += $lists_v['all_money'];
                                    $list[$list_k]['purchase_money'] += $lists_v['purchase_money'];
                                    $list[$list_k]['unit_price'] = round(($list[$list_k]['all_money']/$list[$list_k]['i_number']),$price_decimal);
                                    $status = true;
                                    if($list[$list_k]['i_number']%$lists_v['basic_nmber']>0){
                                        $list[$list_k]['basic_nmber'] = floor($list[$list_k]['i_number']/$lists_v['unit_conversion']).$lists_v['u_name'].($list[$list_k]['i_number']%$lists_v['unit_conversion']).$list_v['u_name'];
                                    }else{
                                        $list[$list_k]['basic_nmber'] = floor($list[$list_k]['i_number']/$lists_v['unit_conversion']).$lists_v['u_name'];
                                    }
                                    $list[$list_k]['unit_conversion'] = '1'.$lists_v['u_name'].'='.$lists_v['unit_conversion'].$list_v['u_name'];
                                }
                            }
                        }
                        if(!isset($status)){
                            $list[] = $lists_v;
                        }
                    }
                }
                $all_money = 0;$i_number = 0;$purchase_money = 0;$tax_money = 0;$money_tax_price = 0;
                foreach ($list as $list_k=>$list_v){
                    $all_money += $list_v['all_money'];
                    $i_number += $list_v['i_number'];
                    $purchase_money += $list_v['purchase_money'];
                    $tax_money += $list_v['tax_money'];
                    $money_tax_price += $list_v['money_tax_price'];
                    $list[$list_k]['all_money'] = round($list_v['all_money'],$price_decimal);
                    if($list_v['i_number']!=0){
                        $list[$list_k]['unit_price'] = round($list_v['all_money']/$list_v['i_number'],$price_decimal);
                    }else{
                        $list[$list_k]['unit_price'] = 0;
                    }
                    $list[$list_k]['tax_money'] = round($list_v['tax_money'],$price_decimal);
                    $list[$list_k]['money_tax_price'] = round($list_v['money_tax_price'],$price_decimal);
                }
                if($i_number>0){
                    $unit_price = round($all_money/$i_number,$price_decimal);
                }else{
                    $unit_price = 0;
                }
                $i_number = round($i_number,$number_decimal);
                $all_money = round($all_money,$price_decimal);
                $purchase_money = round($purchase_money,$price_decimal);
                $tax_money = round($tax_money,$price_decimal);
                $money_tax_price = round($money_tax_price,$price_decimal);
                $count = [
                    'i_number'=>$i_number,
                    'unit_price'=>$unit_price,
                    'purchase_money'=>$purchase_money,
                    'all_money'=>$all_money,
                    'tax_money'=>$tax_money,
                    'money_tax_price'=>$money_tax_price,
                ];

                $this->view->assign("list", $list);
                $this->view->assign("counts", $count);
                return $this->view->fetch('goods_purchase_summary');
                break;
            case 'cghzb_gys':
                $search = (array)json_decode($data['search'], true);
                $where = [];$map=[];
                foreach ($search as $k => &$v) {
                    if(!empty($v)){
                        if(strpos($v,' - ') !== false && strpos($k,'time') !== false){
                            $str = explode(' - ',$v);
                            $where['i.'.$k] = ["BETWEEN", [strtotime($str[0]),strtotime($str[1])]];
                        }else{
                            if($k=='supplyer_code'){
                                $map['sp.supplyer_code'] = ["LIKE", "%{$v}%"];
                            }else{
                                $where['i.'.$k] = ["LIKE", "%{$v}%"];
                            }
                        }
                    }
                }

                $field = empty(input('field'))?'supplyer_code':trim(input('field'));
                $order = empty(input('sort'))?'DESC':trim(input('sort'));

                $sup = Db::name('kuyou_suppliers')->alias('sp')
                    ->join('kuyou_supplyertype gt','sp.supplyertype_id=gt.id')
                    ->where($map)
                    ->field('sp.supplyer_code,sp.supplyer_name,gt.supplier_type_name')
                    ->select();

                $listarr = [];
                foreach ($sup as $sup_k=>$sup_v){
                    $list = [];
                    $lists = Db::name('kuyou_goods_purchase_summary')->alias('i')
                        ->join('kuyou_goods g','g.goods_code=i.goods_code')
                        ->join('kuyou_stores s','s.id=i.stores_id')
                        ->join('kuyou_unit u','u.id=i.goods_unit')
                        ->where($where)
                        ->where(['i.supplyer_code'=>$sup_v['supplyer_code']])
                        ->order(['i.'.$field=>$order])
                        ->group('i.goods_code,i.stores_id')
                        ->field('sum(i.tax_money) as tax_money,sum(i.money_tax_price) as money_tax_price,i.goods_code,i.stores_id,sum(i.basic_nmber) as basic_nmber,sum(number) as i_number,sum(all_money) as all_money,i.default_unit,i.goods_unit,i.purchase_money,
                g.goods_code,g.goods_name,g.goods_specification_id,g.unit_id,g.more_unit,
                s.name as s_name,u.name as u_name')
                        ->select();
                    if(!empty($lists)){
                        foreach ($lists as $lists_k=>$lists_v){
                            $lists_v['i_number'] = $lists_v['basic_nmber'];

                            $lists_v['unit_conversion'] = 1;
                            $now_unit = Db::name('kuyou_unit')->where(['id'=>$lists_v['goods_unit']])->find();
                            if(!empty($now_unit)){
                                $unit_conversion = Db::name('kuyou_unit_conversion')->where(['main_unit'=>$lists_v['unit_id'],'vice_unit'=>$now_unit['id']])->find();
                                if(!empty($unit_conversion)){
                                    $lists_v['unit_conversion'] = $unit_conversion['advance_rate'];
                                }
                            }

                            if(!empty($list)){
                                foreach ($list as $list_k=>$list_v){
                                    if($list_v['goods_code']==$lists_v['goods_code'] && $list_v['stores_id']==$lists_v['stores_id']){
                                        $list[$list_k]['i_number'] += $lists_v['i_number'];
                                        $list[$list_k]['all_money'] += $lists_v['all_money'];
                                        $list[$list_k]['purchase_money'] += $lists_v['purchase_money'];
                                        $list[$list_k]['unit_price'] = round(($list[$list_k]['all_money']/$list[$list_k]['i_number']),2);
                                        $status = true;
                                        if($list[$list_k]['i_number']%$lists_v['basic_nmber']>0){
                                            $list[$list_k]['basic_nmber'] = floor($list[$list_k]['i_number']/$lists_v['unit_conversion']).$lists_v['u_name'].($list[$list_k]['i_number']%$lists_v['unit_conversion']).$list_v['u_name'];
                                        }else{
                                            $list[$list_k]['basic_nmber'] = floor($list[$list_k]['i_number']/$lists_v['unit_conversion']).$lists_v['u_name'];
                                        }
                                        if($list_v['more_unit']==1){
                                            $list[$list_k]['unit_conversion'] = '1'.$lists_v['u_name'].'='.$lists_v['unit_conversion'].$list_v['u_name'];
                                        }else{
                                            $lists_v['unit_conversion'] = '';
                                        }
                                    }
                                }
                            }
                            if(!isset($status)){
                                $unit_name = Db::name('kuyou_unit')->where(['id'=>$lists_v['default_unit']])->value('name');
                                if($lists_v['basic_nmber']!=0){
                                    if($lists_v['i_number']%$lists_v['basic_nmber']>0){
                                        $lists_v['basic_nmber'] = floor($lists_v['i_number']/$lists_v['unit_conversion']).$lists_v['u_name'].($lists_v['i_number']%$lists_v['unit_conversion']).$unit_name;
                                    }else{
                                        $lists_v['basic_nmber'] = ($lists_v['i_number']/$lists_v['unit_conversion']).$lists_v['u_name'];
                                    }
                                }else{
                                    $lists_v['basic_nmber'] = 0;
                                }
                                if($lists_v['more_unit']==1){
                                    $lists_v['unit_conversion'] = '1'.$lists_v['u_name'].'='.$lists_v['unit_conversion'].$unit_name;
                                }else{
                                    $lists_v['unit_conversion'] = '';
                                }
                                $lists_v['u_name'] = $unit_name;
                                $list[] = $lists_v;
                            }
                        }
                    }
                    foreach ($list as $list_k=>$list_v){
                        $list_v['all_money'] = round($list_v['all_money'],2);
                        if($list_v['i_number']!=0){
                            $list_v['unit_price'] = round($list_v['all_money']/$list_v['i_number'],2);
                        }else{
                            $list_v['unit_price'] = 0;
                        }
                        $list_v['tax_money'] = round($list_v['tax_money'],2);
                        $list_v['money_tax_price'] = round($list_v['money_tax_price'],2);

                        $list_v[$field] = $sup_v['supplyer_code'];
                        $list_v['supplyer_name'] = $sup_v['supplyer_name'];
                        $list_v['supplier_type_name'] = $sup_v['supplier_type_name'];
                        $listarr[] = $list_v;
                    }
                    $sup[$sup_k]['list'] = $list;
                }

                //获取设置
                $set= \think\Db::name('kuyou_sets')->field('type,name,value,is_checked,set')->select();
                $setList = [];
                foreach ($set as $set_k=>$set_v){
                    if(!empty($set_v['set'])){
                        $set_v['set'] = unserialize($set_v['set']);
                    }
                    $setList[$set_v['name']] = $set_v;
                }
                //数量价格格式化
                $number_decimal = $setList['number_decimal']['value'];
                $price_decimal  = $setList['price_decimal']['value'];

                $count = [
                    'i_number'=>0,
                    'unit_price'=>0,
                    'all_money'=>0,
                    'tax_money'=>0,
                    'purchase_money'=>0,
                    'money_tax_price'=>0,
                ];
                $counts = $count;
                $counts['supplier_type_name'] = '合计';
                $data = [];
                $now = isset($listarr[0][$field])?$listarr[0][$field]:'';
                foreach ($listarr as $list_k=>$list_v){
                    if($list_v[$field]!=$now){
                        $now = $list_v[$field];
                        $row = $count;$row['supplier_type_name'] = '小计';
                        $row['unit_price'] = round($row['all_money']/$row['i_number'],2);
                        $data[] = $row;
                        foreach ($count as $count_k=>$count_v){
                            $count[$count_k] = $list_v[$count_k];
                            $counts[$count_k] += $list_v[$count_k];
                        }
                    }else{
                        foreach ($count as $count_k=>$count_v){
                            $count[$count_k] += $list_v[$count_k];
                            $counts[$count_k] += $list_v[$count_k];
                        }
                    }
                    $data[] = $list_v;
                    if($list_k==(sizeof($listarr)-1) || sizeof($listarr)==1){
                        $row = $count;$row['supplier_type_name'] = '小计';
                        if($row['i_number']!=0){
                            $row['unit_price'] = round($row['all_money']/$row['i_number'],$price_decimal);
                        }else{
                            $row['unit_price'] = 0;
                        }
                        $data[] = $row;
                    }
                }
                $counts['unit_price'] = $counts['i_number']>0?(round($counts['all_money']/$counts['i_number'],$price_decimal)):0;

                $counts['i_number'] = round($counts['i_number'],$number_decimal);
                $counts['unit_price'] = round($counts['unit_price'],$price_decimal);
                $counts['all_money'] = round($counts['all_money'],$price_decimal);
                $counts['purchase_money'] = round($counts['purchase_money'],$price_decimal);
                $counts['tax_money'] = round($counts['tax_money'],$price_decimal);
                $counts['money_tax_price'] = round($counts['money_tax_price'],$price_decimal);
                $data[] = $counts;
                $this->view->assign("list", $data);
                $this->view->assign("counts", $counts);
                return $this->view->fetch('goods_purchase_summarys');
                break;
            case 'cgfk':
                $page = isset($data['page'])?$data['page']:1;
                $limit = isset($data['limit'])?$data['limit']:10;
                $search = (array)json_decode($data['search'], true);
                $where = [];
                foreach ($search as $k => &$v) {
                    if(!empty($v)){
                        if(strpos($v,' - ') !== false && strpos($k,'time') !== false){
                            $str = explode(' - ',$v);
                            $where[$k] = ["BETWEEN", [strtotime($str[0]),strtotime($str[1])]];
                        }else{
                            $where[$k] = ["LIKE", "%{$v}%"];
                        }
                    }
                }
                $list = Db::name('kuyou_payment_log')->where($where)->page($page,$limit)->order(['bill_code'=>'ASC','id'=>'ASC'])->select();

                $price_decimal = \think\Db::name('kuyou_sets')->where(['name'=>'price_decimal'])->value('value');

                $oldcount = $count = [
                    'money_tax_price'=>0,
                    'purchase_money'=>0,
                    'discount_money'=>0,
                    'real_money'=>0,
                    'pay_money'=>0,
                    'give_money'=>0,
                ];
                $counts = $count;
                $counts['s_name'] = '合计';
                $data = [];
                $field = 'bill_code';
                $now = isset($list[0][$field])?$list[0][$field]:'';
                $give_money = 0;
                $pay_money = 0;
                $status = true;
                foreach ($list as $list_k=>$list_v){
                    $list[$list_k]['supplyer_name'] = Db::name('kuyou_suppliers')->where(['supplyer_code'=>$list_v['suppliers_code']])->value('supplyer_name');
                    $list[$list_k]['payment_rate'] = '';
                    $list[$list_k]['payment_rate'] = '';

                    if($list_v[$field]!=$now){
                        $now = $list_v[$field];
                        $row = $count;
                        $row['s_name'] = '小计';$row['supplyer_name'] = '小计';$row['bill_time'] = '';
                        if(($count['pay_money']+$count['give_money'])>0){
                            $row['payment_rate'] = round($count['pay_money']/($count['pay_money']+$count['give_money']),4)*100 .'%';
                        }else{
                            $row['payment_rate'] = '';
                        }
                        $data[] = $row;
                        foreach ($count as $count_k=>$count_v){
                            $counts[$count_k] += $row[$count_k];
                        }
                        $status = true;
                    }

                    if($list_v[$field]==$now){
                        if($status){
                            $give_money = $list_v['give_money'];$pay_money = $list_v['pay_money'];
                            $status = false;
                            $count = $oldcount;
                        }else{
                            $pay_money += $list_v['pay_money'];
                            $give_money += $list_v['give_money'];
                        }
                        $list_v['give_money'] = $give_money;
                        if(!$status){
                            foreach ($count as $count_k=>$count_v){
                                $count[$count_k] += $list_v[$count_k];
                            }
                            $count['give_money'] = $list_v['give_money'];
                        }
                    }
                    $data[] = $list_v;
                    if($list_k==(sizeof($list)-1) || sizeof($list)==1){
                        $row = $count;$row['s_name'] = '小计';$row['supplyer_name'] = '小计';$row['bill_time'] = '';
                        if($row['give_money']>0){
                            $row['payment_rate'] = round($count['pay_money']/($count['pay_money']+$count['give_money']),4)*100 .'%';
                        }else{
                            $row['payment_rate'] = '';
                        }
                        $data[] = $row;
                        foreach ($count as $count_k=>$count_v){
                            $counts[$count_k] += $row[$count_k];
                        }
                    }
                }

                if ($counts['give_money']>0){
                    $counts['payment_rate'] = round($counts['pay_money']/($counts['pay_money']+$counts['give_money']),4)*100 .'%';
                }else{
                    $counts['payment_rate'] = '';
                }
                $counts['supplyer_name'] = '合计';$counts['bill_time'] = '';
                $counts['purchase_money'] = round($counts['purchase_money'],$price_decimal);
                $counts['discount_money'] = round($counts['discount_money'],$price_decimal);
                $counts['real_money'] = round($counts['real_money'],$price_decimal);
                $counts['pay_money'] = round($counts['pay_money'],$price_decimal);
                $counts['give_money'] = round($counts['give_money'],$price_decimal);
                $data[] = $counts;

                $this->view->assign("list", $data);
                $this->view->assign("counts", $counts);
                return $this->view->fetch('payment_log');
                break;
            case 'xsddgz':
                $page = isset($data['page'])?$data['page']:1;
                $limit = isset($data['limit'])?$data['limit']:10;
                $search = (array)json_decode($data['search'], true);
                $where = [];
                foreach ($search as $k=>$v){
                    if(strpos($v,' - ') !== false && strpos($k,'time') !== false){
                        $str = explode(' - ',$v);
                        $where['i.'.$k] = ["BETWEEN", [strtotime($str[0]),strtotime($str[1])]];
                    }else{
                        $where['i.'.$k] = ["LIKE", "%{$v}%"];
                    }
                }
                $field = empty(input('field'))?'goods_code':trim(input('field'));
                $order = empty(input('sort'))?'DESC':trim(input('sort'));

                $list = Db::name('kuyou_goods_sales_order_info')->alias('i')
                    ->join('kuyou_goods_sales_order po','po.purchase_code=i.purchase_code')
                    ->join('kuyou_goods g','g.goods_code=i.goods_code')
                    ->join('kuyou_unit u','u.id=i.default_unit')
                    ->join('kuyou_customers s','s.id=i.customers_id')
                    ->join('kuyou_stores r','r.id=i.stores_id')
                    ->where($where)
                    ->order(['i.'.$field=>$order,'i.purchase_time'=>'DESC'])
                    ->field('i.id,i.goods_attr,i.goods_code,i.purchase_code,i.purchase_type,i.purchase_time,i.delivery_time
                ,i.all_money,po.status,i.number,i.tax_included,i.money_tax_price,i.unit_price,i.number as library_number,i.money_tax_price as library_money,i.library_time,
                g.goods_name,g.goods_specification_id,
                s.customer_name as s_name,
                r.name as r_name,
                u.name as unitname')
                    ->select();
                foreach ($list as $list_k=>$list_v){
                    $purord_info = Db::name('kuyou_goods_saleord_info')->where(['order_id'=>$list_v['id'],'status'=>'1'])->field('sum(number) as number,sum(money_tax_price) as all_money')->find();
                    $p_id = Db::name('kuyou_goods_saleord_info')->where(['order_id'=>$list_v['id'],'status'=>'1'])->value('purchase_id');
                    $goods_excpur_info = Db::name('kuyou_goods_saleexc_info')->where(['purchase_id'=>$p_id,'status'=>'1'])->find();
                    if($goods_excpur_info){
                        $purord_info['number'] = round( ($purord_info['number']-$goods_excpur_info['number']),2 );
                        $purord_info['all_money'] = round( ($purord_info['all_money']-$goods_excpur_info['money_tax_price']),2 );
                    }
                    if($purord_info){
                        $list[$list_k]['library_number'] = round(($list[$list_k]['library_number']-$purord_info['number']),2);
                        $list[$list_k]['library_money'] = round(($list[$list_k]['library_money']-$purord_info['all_money']),4);
                    }
                    if($list[$list_k]['library_number']>0 && $list[$list_k]['library_number']<$list[$list_k]['number']){
                        $list[$list_k]['status'] = 2;
                    }else if($list[$list_k]['library_number']>0 && $list[$list_k]['library_number']=$list[$list_k]['number']){
                        $list[$list_k]['status'] = 0;
                    }
                    $purord_time = Db::name('kuyou_goods_saleord_info')->where(['order_id'=>$list_v['id'],'status'=>1])->order('times','DESC')->value('times');
                    if($purord_time){
                        $list[$list_k]['library_time'] = $purord_time;
                    }
                }

                foreach ($list as $list_k=>$list_v){
                    $goods = $this->getGoods($list_v['goods_code'],$list_v['goods_attr']);
                    $list[$list_k]['goods_name'] = isset($goods['goods_name'])?$goods['goods_name']:$list_v['goods_name'];
                    if($list_v['purchase_type']==2){
                        $list[$list_k]['number'] = -$list_v['number'];
                        $list[$list_k]['money_tax_price'] = -$list_v['money_tax_price'];
                        $list[$list_k]['library_number'] = -$list_v['library_number'];
                        $list[$list_k]['library_money'] = -$list_v['library_money'];
                    }
                }

                $count = [
                    'number'=>0,
                    'money_tax_price'=>0,
                    'library_number'=>0,
                    'library_money'=>0,
                ];
                $counts = $count;
                $counts['goods_code'] = '合计';
                $data = [];
                $now = isset($list[0][$field])?$list[0][$field]:'';
                foreach ($list as $list_k=>$list_v){
                    if($list_v[$field]!=$now){
                        $now = $list_v[$field];
                        $row = $count;$row['goods_code'] = '小计';
                        $data[] = $row;
                        foreach ($count as $count_k=>$count_v){
                            $count[$count_k] = $list_v[$count_k];
                            $counts[$count_k] += $list_v[$count_k];
                        }
                    }else{
                        foreach ($count as $count_k=>$count_v){
                            $count[$count_k] += $list_v[$count_k];
                            $counts[$count_k] += $list_v[$count_k];
                        }
                    }
                    $data[] = $list_v;
                    if($list_k==(sizeof($list)-1) || sizeof($list)==1){
                        $row = $count;$row['goods_code'] = '小计';
                        $data[] = $row;
                    }
                }
                $data[] = $counts;
                $this->view->assign("list", $data);
                $this->view->assign("counts", $counts);
                return $this->view->fetch('goods_sales_order_info');
                break;
            case 'dbd':
                $list = Db::name('kuyou_allocation')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                Db::name('kuyou_allocation')->where(['id'=>['in',$id]])->inc('print_num')->update();
                foreach ($list as $list_k=>$row){
                    $info = Db::name('kuyou_allocation_info')->where((new Goods())->setWhere(['allocation_id'=>$row['id']]))->select();
                    $number = 0;
                    foreach ($info as $info_k=>$info_v){
                        $number+=$info_v['number'];
                        $goods = $this->getGoods('',$info_v['goods_attr'],$info_v['goods_id']);
                        $info[$info_k]['goods'] = $goods;
                        $info[$info_k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$info_v['goods_unit']])->find();
                        $info[$info_k]['stores_out'] = Db::name('kuyou_stores')->where(['id'=>$info_v['stores_out']])->find();
                        $info[$info_k]['stores_enter'] = Db::name('kuyou_stores')->where(['id'=>$info_v['stores_enter']])->find();
                    }
                    $number = round($number,$number_decimal);
                    $row['print_number'] = $number;

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['info_list'] = $info;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('allocation');
                break;
            case 'cbtzd':
                $list = Db::name('kuyou_adjustment')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                foreach ($list as $list_k=>$row){
                    if($row['print_num']>0){
                        Db::name('kuyou_adjustment')->where(['id'=>$row['id']])->inc('print_num')->update();
                    }else{
                        Db::name('kuyou_adjustment')->where(['id'=>$row['id']])->update(['print_num'=>1]);
                    }
                    $info = Db::name('kuyou_adjustment_info')->where((new Goods())->setWhere(['purchase_code'=>$row['purchase_code']]))->select();
                    $money = 0;
                    foreach ($info as $info_k=>$info_v){
                        $money+=$info_v['money'];
                        $info[$info_k]['goods'] = Db::name('kuyou_goods')->where(['id'=>$info_v['goods_id']])->find();
                        $info[$info_k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$info_v['goods_unit']])->find();
                        $info[$info_k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$info_v['stores_id']])->find();
                    }
                    $money = round($money,$price_decimal);
                    $row['print_money'] = $money;
                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['info_list'] = $info;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('adjustment');
                break;
            case 'qtrkd':
                $list = Db::name('kuyou_warehousing')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                foreach ($list as $list_k=>$row){
                    if($row['print_num']>0){
                        Db::name('kuyou_warehousing')->where(['id'=>$row['id']])->inc('print_num')->update();
                    }else{
                        Db::name('kuyou_warehousing')->where(['id'=>$row['id']])->update(['print_num'=>1]);
                    }
                    $purchase_info = Db::name('kuyou_warehousing_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $number = 0;$money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $purchase_info[$k]['goods'] = Db::name('kuyou_goods')->where(['id'=>$v['goods_id']])->find();
                        $purchase_info[$k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$v['goods_unit']])->find();
                        $purchase_info[$k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$v['stores_id']])->find();
                        $number+=$v['number'];$money+=$v['price'];
                    }
                    $number = round($number,$number_decimal);
                    $money  = round($money,$price_decimal);
                    $row['print_number'] = $number;
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['purchase_info'] = $purchase_info;

                    $suppliers = Db::name('kuyou_suppliers')->where(['id'=>$row['suppliers_id']])->find();
                    $row['suppliers'] = $suppliers;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('warehousing');
                break;
            case 'qtckd':
                $list = Db::name('kuyou_warehouse')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                foreach ($list as $list_k=>$row){
                    if($row['print_num']>0){
                        Db::name('kuyou_warehouse')->where(['id'=>$row['id']])->inc('print_num')->update();
                    }else{
                        Db::name('kuyou_warehouse')->where(['id'=>$row['id']])->update(['print_num'=>1]);
                    }
                    $purchase_info = Db::name('kuyou_warehouse_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $number = 0;$money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $purchase_info[$k]['goods'] = Db::name('kuyou_goods')->where(['id'=>$v['goods_id']])->find();
                        $purchase_info[$k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$v['goods_unit']])->find();
                        $purchase_info[$k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$v['stores_id']])->find();
                        $number+=$v['number'];$money+=$v['price'];
                    }
                    $number = round($number,$number_decimal);
                    $money  = round($money,$price_decimal);
                    $row['print_number'] = $number;
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['purchase_info'] = $purchase_info;

                    $customers = Db::name('kuyou_customers')->where(['id'=>$row['customers_id']])->find();
                    $row['customers'] = $customers;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('warehouse');
                break;
            case 'zzd':
                $list = Db::name('kuyou_assemble')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                Db::name('kuyou_assemble')->where(['id'=>$id])->inc('print_num')->update();
                foreach ($list as $list_k=>$row){
                    $purchase_info = Db::name('kuyou_assemble_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $number = 0;$money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $purchase_info[$k]['goods'] = Db::name('kuyou_goods')->where(['id'=>$v['goods_id']])->find();
                        $purchase_info[$k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$v['goods_unit']])->find();
                        $purchase_info[$k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$v['stores_id']])->find();
                        if($v['type']==2){
                            $number+=$v['number'];$money+=$v['cost_money'];
                        }
                    }
                    $number = round($number,$number_decimal);
                    $money  = round($money,$price_decimal);
                    $row['print_number'] = $number;
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['purchase_info'] = $purchase_info;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('assemble');
                break;
            case 'cxd':
                $list = Db::name('kuyou_split')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                Db::name('kuyou_split')->where(['id'=>$id])->inc('print_num')->update();
                foreach ($list as $list_k=>$row){
                    $purchase_info = Db::name('kuyou_split_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $number = 0;$money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $purchase_info[$k]['goods'] = Db::name('kuyou_goods')->where(['id'=>$v['goods_id']])->find();
                        $purchase_info[$k]['unit'] = Db::name('kuyou_unit')->where(['id'=>$v['goods_unit']])->find();
                        $purchase_info[$k]['stores'] = Db::name('kuyou_stores')->where(['id'=>$v['stores_id']])->find();
                        if($v['type']==2){
                            $number+=$v['number'];$money+=$v['cost_money'];
                        }
                    }
                    $number = round($number,$number_decimal);
                    $money  = round($money,$price_decimal);
                    $row['print_number'] = $number;
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['purchase_info'] = $purchase_info;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('split');
                break;
            case 'fkd':
                $list = Db::name('kuyou_payment')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                foreach ($list as $list_k=>$row){
                    if($row['print_num']>0){
                        Db::name('kuyou_payment')->where(['id'=>$row['id']])->inc('print_num')->update();
                    }else{
                        Db::name('kuyou_payment')->where(['id'=>$row['id']])->update(['print_num'=>1]);
                    }

                    $payment_account = Db::name('kuyou_payment_account')->where(['collection_id'=>$row['id']])->select();
                    $payment_sale    = Db::name('kuyou_payment_sale')->where(['collection_id'=>$row['id']])->select();

                    $settlementtype = Db::name('kuyou_settlementtype')->where((new Goods())->setWhere())->column('name','id');
                    $money = 0;
                    foreach ($payment_account as $k=>$v){
                        $money+=$v['money'];
                        $payment_account[$k]['accounts'] = Db::name('kuyou_accounts')->where(['id'=>$v['accounts_id']])->find();
                        $payment_account[$k]['settlementtype'] = $settlementtype[$v['settlementtype']];
                    }
                    $money  = round($money,$price_decimal);
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $suppliers = Db::name('kuyou_suppliers')->where(['id'=>$row['customers_id']])->find();
                    $row['suppliers'] = $suppliers;

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['payment_account'] = $payment_account;
                    $row['payment_sale'] = $payment_sale;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('payment');
                break;
            case 'skd':
                $list = Db::name('kuyou_collection')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                $settlementtype = Db::name('kuyou_settlementtype')->where((new Goods())->setWhere())->column('name','id');
                foreach ($list as $list_k=>$row){
                    if($row['print_num']>0){
                        Db::name('kuyou_collection')->where(['id'=>$row['id']])->inc('print_num')->update();
                    }else{
                        Db::name('kuyou_collection')->where(['id'=>$row['id']])->update(['print_num'=>1]);
                    }

                    $payment_account = Db::name('kuyou_collection_account')->where(['collection_id'=>$row['id']])->select();
                    $payment_sale    = Db::name('kuyou_collection_sale')->where(['collection_id'=>$row['id']])->select();

                    $money = 0;
                    foreach ($payment_account as $k=>$v){
                        $money+=$v['money'];
                        $payment_account[$k]['accounts'] = Db::name('kuyou_accounts')->where(['id'=>$v['accounts_id']])->find();
                        $payment_account[$k]['settlementtype'] = isset($settlementtype[$v['settlementtype']])?$settlementtype[$v['settlementtype']]:'';
                    }
                    $money  = round($money,$price_decimal);
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $customers = Db::name('kuyou_customers')->where(['id'=>$row['customers_id']])->find();
                    $row['customers'] = $customers;

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['payment_account'] = $payment_account;
                    $row['payment_sale'] = $payment_sale;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('collection');
                break;
            case 'hxd':
                $business_type = ['','预收冲应收','预付冲应付','应收冲应付','应收转应收','应付转应付'];
                $list = Db::name('kuyou_writeoff')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                foreach ($list as $list_k=>$row){
                    $row['business_type_text'] = $business_type[$row['business_type']];
                    if($row['print_num']>0){
                        Db::name('kuyou_writeoff')->where(['id'=>$row['id']])->inc('print_num')->update();
                    }else{
                        Db::name('kuyou_writeoff')->where(['id'=>$row['id']])->update(['print_num'=>1]);
                    }

                    if ($row['business_type']==1){
                        $row['customers_id'] = Db::name('kuyou_customers')->where(['id'=>$row['customers_id']])->value('customer_name');
                    }else if ($row['business_type']==2){
                        $row['suppliers_id'] = Db::name('kuyou_suppliers')->where(['id'=>$row['suppliers_id']])->value('supplyer_name');
                    }else if ($row['business_type']==3){
                        $row['customers_id'] = Db::name('kuyou_customers')->where(['id'=>$row['customers_id']])->value('customer_name');
                        $row['suppliers_id'] = Db::name('kuyou_suppliers')->where(['id'=>$row['suppliers_id']])->value('supplyer_name');
                    }else if ($row['business_type']==4){
                        $row['customers_out_id'] = Db::name('kuyou_customers')->where(['id'=>$row['customers_out_id']])->value('customer_name');
                        $row['customers_enter_id'] = Db::name('kuyou_customers')->where(['id'=>$row['customers_enter_id']])->value('customer_name');
                    }else{
                        $row['suppliers_out_id'] = Db::name('kuyou_suppliers')->where(['id'=>$row['suppliers_out_id']])->value('supplyer_name');
                        $row['suppliers_enter_id'] = Db::name('kuyou_suppliers')->where(['id'=>$row['suppliers_enter_id']])->value('supplyer_name');
                    }

                    $purchase_info = Db::name('kuyou_writeoff_info')->where(['collection_id'=>$row['id']])->select();
                    $row['purchase_info'] = $purchase_info;

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('writeoff');
                break;
            case 'qtsrd':
                $list = Db::name('kuyou_income')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                $income = Db::name('kuyou_income_type')->column('name','id');
                foreach ($list as $list_k=>$row){
                    if($row['print_num']>0){
                        Db::name('kuyou_income')->where(['id'=>$row['id']])->inc('print_num')->update();
                    }else{
                        Db::name('kuyou_income')->where(['id'=>$row['id']])->update(['print_num'=>1]);
                    }
                    $purchase_info = Db::name('kuyou_income_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $money+=$v['money'];
                        $purchase_info[$k]['income_type_id'] = $income[$v['income_type_id']];
                    }
                    $money  = round($money,$price_decimal);
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['accounts'] = Db::name('kuyou_accounts')->where(['id'=>$row['accounts_id']])->find();
                    $row['purchase_info'] = $purchase_info;

                    $customers = Db::name('kuyou_customers')->where(['id'=>$row['customers_id']])->find();
                    $row['customers'] = $customers;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('income');
                break;
            case 'qtzcd':
                $list = Db::name('kuyou_expenditure')->where(['id'=>['in',$id]])->select();
                if(empty($list)){
                    $this->error(__('No relevant data found'));
                }
                $income = Db::name('kuyou_expend_type')->column('name','id');
                foreach ($list as $list_k=>$row){
                    if($row['print_num']>0){
                        Db::name('kuyou_expenditure')->where(['id'=>$row['id']])->inc('print_num')->update();
                    }else{
                        Db::name('kuyou_expenditure')->where(['id'=>$row['id']])->update(['print_num'=>1]);
                    }
                    $purchase_info = Db::name('kuyou_expenditure_info')->where(['purchase_code'=>$row['purchase_code']])->select();
                    $money = 0;
                    foreach ($purchase_info as $k=>$v){
                        $money+=$v['money'];
                        $purchase_info[$k]['expend_type_id'] = $income[$v['expend_type_id']];
                    }
                    $money  = round($money,$price_decimal);
                    $row['print_money'] = $money;
                    $row['print_money_c'] = $this->num_to_rmb($money);

                    $row['preparation'] = Db::name('admin')->where(['id'=>$row['preparation_id']])->find();
                    if(isset($row['preparation']['nickname']) && !empty($row['preparation']['nickname'])){
                        $row['preparation']['username'] = $row['preparation']['nickname'];
                    }
                    $row['accounts'] = Db::name('kuyou_accounts')->where(['id'=>$row['accounts_id']])->find();
                    $row['purchase_info'] = $purchase_info;

                    $suppliers = Db::name('kuyou_suppliers')->where(['id'=>$row['suppliers_id']])->find();
                    $row['suppliers'] = $suppliers;
                    $list[$list_k] = $row;
                }
                $this->view->assign("list", $list);
                return $this->view->fetch('expenditure');
                break;
            default:
                $this->error(__('Parameter error'));
        }
    }

    function num_to_rmb($num){
        $c1 = "零壹贰叁肆伍陆柒捌玖";
        $c2 = "分角元拾佰仟万拾佰仟亿";
        //精确到分后面就不要了，所以只留两个小数位
        $num = round($num, 2);
        //将数字转化为整数
        $num = $num * 100;
        if (strlen($num) > 10) {
            return "金额太大，请检查";
        }
        $i = 0;
        $c = "";
        while (1) {
            if ($i == 0) {
                //获取最后一位数字
                $n = substr($num, strlen($num)-1, 1);
            } else {
                $n = $num % 10;
            }
            //每次将最后一位数字转化为中文
            $p1 = substr($c1, 3 * $n, 3);
            $p2 = substr($c2, 3 * $i, 3);
            if ($n != '0' || ($n == '0' && ($p2 == '亿' || $p2 == '万' || $p2 == '元'))) {
                $c = $p1 . $p2 . $c;
            } else {
                $c = $p1 . $c;
            }
            $i = $i + 1;
            //去掉数字最后一位了
            $num = $num / 10;
            $num = (int)$num;
            //结束循环
            if ($num == 0) {
                break;
            }
        }
        $j = 0;
        $slen = strlen($c);
        while ($j < $slen) {
            //utf8一个汉字相当3个字符
            $m = substr($c, $j, 6);
            //处理数字中很多0的情况,每次循环去掉一个汉字“零”
            if ($m == '零元' || $m == '零万' || $m == '零亿' || $m == '零零') {
                $left = substr($c, 0, $j);
                $right = substr($c, $j + 3);
                $c = $left . $right;
                $j = $j-3;
                $slen = $slen-3;
            }
            $j = $j + 3;
        }
        //这个是为了去掉类似23.0中最后一个“零”字
        if (substr($c, strlen($c)-3, 3) == '零') {
            $c = substr($c, 0, strlen($c)-3);
        }
        //将处理的汉字加上“整”
        if (empty($c)) {
            return "零元整";
        }else{
            return $c . "整";
        }
    }
}
